package com.cs.deviceManager.mapper;

import com.cs.deviceManager.domain.DevDeviceCommand;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Date;

/**
 * 设备指令Mapper接口
 * 用于实现间歇性设备控制指令的数据库操作
 * 
 * @author zizige
 * @date 2025-06-30
 */
public interface DevDeviceCommandMapper 
{
    /**
     * 查询设备指令
     * 
     * @param commandId 设备指令主键
     * @return 设备指令
     */
    DevDeviceCommand selectDevDeviceCommandByCommandId(Long commandId);

    /**
     * 查询设备指令列表
     * 
     * @param devDeviceCommand 设备指令
     * @return 设备指令集合
     */
    List<DevDeviceCommand> selectDevDeviceCommandList(DevDeviceCommand devDeviceCommand);

    /**
     * 新增设备指令
     * 
     * @param devDeviceCommand 设备指令
     * @return 结果
     */
    int insertDevDeviceCommand(DevDeviceCommand devDeviceCommand);

    /**
     * 修改设备指令
     * 
     * @param devDeviceCommand 设备指令
     * @return 结果
     */
    int updateDevDeviceCommand(DevDeviceCommand devDeviceCommand);

    /**
     * 删除设备指令
     * 
     * @param commandId 设备指令主键
     * @return 结果
     */
    int deleteDevDeviceCommandByCommandId(Long commandId);

    /**
     * 批量删除设备指令
     * 
     * @param commandIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteDevDeviceCommandByCommandIds(String[] commandIds);

    /**
     * 根据设备ID查询待执行指令
     * 
     * @param deviceId 设备ID
     * @return 待执行指令列表
     */
    List<DevDeviceCommand> selectPendingCommandsByDeviceId(String deviceId);

    /**
     * 更新指令状态
     * 
     * @param commandId 指令ID
     * @param status 新状态
     * @return 结果
     */
    int updateCommandStatus(@Param("commandId") Long commandId, @Param("status") String status);

    /**
     * 查询已过期的指令
     * 
     * @param currentTime 当前时间
     * @return 过期指令列表
     */
    List<DevDeviceCommand> selectExpiredCommands(Date currentTime);

    /**
     * 增加指令重试次数
     * 
     * @param commandId 指令ID
     * @return 结果
     */
    int incrementRetryCount(Long commandId);
}